home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_09_12
/
9n12104a
< prev
next >
Wrap
Text File
|
1991-10-28
|
3KB
|
69 lines
// Listing 3 - Header file for binaryfile class
// This contains the full class definition with
// the constructor and destructor functions
//
enum FILEMODE {Readonly, Update, AnyWrite, Append, Recreate};
enum READMODE {FirstRecord, NextRecord, PreviousRecord, LastRecord};
enum SHAREMODE {NoneShared, ReadShared, WriteShared};
class binaryfile {
private:
char name[81]; // name of file (size is DOS specific)
enum FILEMODE mode; // access mode of the file
enum SHAREMODE share; // whether shared access is allowed
unsigned length; // record length
int handle; // file handle (-1 if not open)
long header; // size of header at start of file
long count; // number of records in the file
long recnbr; // current record number (starting at 1)
long locked; // if >0, currently locked record
long countrecords(); // check size of file
public:
char *record; // pointer to record area
binaryfile (unsigned); // constructor
~binaryfile (); // destructor
// inline functions to read private elements
long getcount () {
return (share == WriteShared ? countrecords() : count);
};
long getheader () {return header;};
unsigned getlength () {return length;};
long getlocked () {return locked;};
enum FILEMODE getmode () {return mode;};
char* getname (char *n) {return (strcpy (n, name));};
long getrecnbr () {return recnbr;};
enum SHAREMODE getshare() {return share;};
int isopen () {return (handle >= 0);};
// Functions to open, close, read, write
int changelength (unsigned); // change record length
int fileopen (const char *, enum FILEMODE = Readonly,
long = 0L, enum SHAREMODE = ReadShared);// Open file
int fileclose (); // close the file
int fileread (enum READMODE = NextRecord); // read sequentially
int fileread (long); // read a specific record
int filewrite (); // rewrite record, or append
int filewrite (long); // write a specific record
int lockrecord (long); // lock a specific record
void unlockrecord (); // unlock current record
};
// =============================================
// The constructor for class binaryfile
//
binaryfile::binaryfile (unsigned len) {
length = len; // Assign the record length
handle = -1;
record = (len <= 4096 ? (char*) malloc (len + 2) : NULL);
// assign record space with safety zone
}
// =============================================
// The destructor for class binaryfile
//
binaryfile::~binaryfile () {
if (isopen()) fileclose(); // close the file if open
if (record != NULL) free (record); // release area
}